import { createSlice } from "@reduxjs/toolkit";
import axios from "axios";

const foodsStore = createSlice({
  name: "foods",
  initialState: {
    foodsList: [],//菜单列表
    activeIndex: 0,// 当前激活的菜单索引
    cartList: [],//购物车列表
  },
  reducers: {
    //这是一个reducer函数，用于生成新的状态,状态时通过action对象传递的,
    // action对象将从dispatch方法传递过来,dispatch是在组件中使用，用于触发reducer函数

    //更改菜单列表数据
    setFoodsList(state, action) {
      state.foodsList = action.payload;
    },
    // 更改当前激活的菜单索引
    changeActiveIndex(state, action) {
      state.activeIndex = action.payload;
    },
    // 添加购物车列表数据
    //出现bug:count属性未定义，导致报错
    // addCart(state, action) {
    //   // 判断:是否已经添加过该商品,如果添加过，则数量加1,如果没有添加过，则添加到购物车列表中
    //   const item=state.cartList.find(item=>item.id===action.payload.id)
    //   if(item){
    //     item.count++
    //   }else{
    //     state.cartList.push(action.payload)
    //   }
    // }

    addCart(state, action) {
      const itemExists = state.cartList.some(item => item.id === action.payload.id);
      if (itemExists) {
        return {
          ...state,
          cartList: state.cartList.map(item => {
            if (item.id === action.payload.id) {
              return {
                ...item,
                count: (item.count || 0) + 1 // 处理可能未定义的count
              };
            }
            return item;
          })
        };
      }

      return {
        ...state,
        cartList: [
          ...state.cartList,
          { ...action.payload, count: 1 } // 新商品必须初始化count
        ]
      };
    },
    // 增加数量
    incrementCount(state,action){
      // 找到对应的商品
      const itemgoods=state.cartList.find(item=>item.id===action.payload.id)
      if(itemgoods){
        itemgoods.count++
      }
    },
    // 减少数量
    decrementCount(state,action){
      // 找到对应的商品
      const itemgoods=state.cartList.find(item=>item.id===action.payload.id)
      if(itemgoods){
        itemgoods.count--
      }
    },
    // 清空购物车
    clearCart(state){
      state.cartList=[]
    }
  }
})

// 解构createAction方法
const { setFoodsList, changeActiveIndex, addCart ,incrementCount,decrementCount,clearCart} = foodsStore.actions

// 异步
const fetchFoodsList = () => {
  return async (dispatch) => {
    // 获取数据
    const res = await axios.get("http://localhost:3004/takeaway");
    // dispatch提交,生成新的action对象
    dispatch(setFoodsList(res.data))
  }
}

// 按需导出
export { fetchFoodsList, changeActiveIndex, addCart ,incrementCount,decrementCount,clearCart }

// 获取reducer
const reducer = foodsStore.reducer
// 默认导出
export default reducer
